Дано
трёхзначное натуральное число n.
Определите сумму наибольшего и наименьшего трёхзначных чисел, которые могут
быть образованы из числа n
перестановкой цифр.
Вход. Натуральное
число n (100 ≤ n ≤ 999).
Выход. Выведите
сумму наибольшего и наименьшего трёхзначных чисел.
Пример входа |
Пример выхода |
524 |
787 |
сортировка
Прочитаем
число в символьный массив. Отсортируем цифры по убыванию, получим наибольшее
число. Отсортируем цифры по возрастанию, получим наименьшее число. Однако если
число в десятичной записи содержало 0, то после сортировки 0 будет в разряде
сотен и число не будет трехзначным. Необходимо найти наименьшую цифру, не
равную 0, и поставить ее в разряд сотен.
Реализация алгоритма
Наименьшее
число будем строить в массиве s, наибольшее – в s1.
char s[5], s1[5];
Считываем
входное число в строку s. Скопируем его в строку s1.
gets(s); strcpy(s1,s);
Отсортируем
цифры числа s по возрастанию, а цифры числа s1 по убыванию.
sort(s,s+3,less<char>());
sort(s1,s1+3,greater<char>());
Если
цифра сотен числа s равна 0, то поменяем ее с цифрой десятков (если она
ненулевая) или с цифрой единиц для получения наименьшего трехзначного числа.
if (s[0] == '0'
&& s[1] != '0') swap(s[0],s[1]);
if (s[0] == '0'
&& s[1] == '0') swap(s[0],s[2]);
Получаем
из строк s и s1 соответственно числа a
и b.
a = 100*(s[0] - '0') +
10*(s[1] - '0') + s[2] - '0';
b = 100*(s1[0] - '0') +
10*(s1[1] - '0') + s1[2] - '0';
Выводим
сумму наибольшего и наименьшего трёхзначных чисел.
printf("%d\n",a+b);